home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 February / Macworld (1998-02).dmg / Control Strip Modules / Sleep Now 1.0.0 / sleepnow.c < prev    next >
C/C++ Source or Header  |  1996-03-31  |  2KB  |  66 lines

  1. /* Sleep Now was written by Geoffrey Keating, 31/3/1996. It is public domain. */
  2.  
  3. /* written for Universal Headers 2.1 */
  4. #define SystemSevenOrLater 1
  5. #define OLDROUTINENAMES 0
  6. #define OLDROUTINELOCATIONS 0
  7. #include <ControlStrip.h>
  8. #include <Icons.h>
  9. #include <Gestalt.h>
  10.  
  11. /* resource ID of the small icon we draw */
  12. #define ourIconID 257
  13.  
  14. /* stuff to control the screen saver */
  15. #define gestaltScreenSaverControl 'SAVC'
  16. enum
  17. {
  18.     eSaverWakeUp = 0,
  19.     eSaverSleep = 1,
  20.     eSaverOn = 2,
  21.     eSaverOff = 3
  22. };
  23. typedef short SaverCommand;
  24. typedef pascal OSErr (*SaverControlProcPtr) (SaverCommand command);
  25.  
  26. /* the main (and only) routine for the sdev */
  27. pascal long
  28. main(long message, Handle iconSuite, Rect *statusRect, GrafPtr statusPort)
  29. {
  30.     SaverControlProcPtr scp;
  31.  
  32.     switch (message)
  33.     {
  34.     case sdevInitModule:
  35.         /* on init, we grab and save our icon */
  36.         if (SBGetDetachIconSuite(&iconSuite, ourIconID, kSelectorAllSmallData) == noErr)
  37.             return (long)iconSuite;
  38.         else
  39.             break;
  40.     case sdevCloseModule:
  41.         /* on close, we dispose the icon we got on startup */
  42.         if (iconSuite != NULL)
  43.             DisposeIconSuite(iconSuite, true);
  44.         break;
  45.     case sdevFeatures:
  46.         return 1<<sdevWantMouseClicks;
  47.     case sdevGetDisplayWidth:
  48.         return 16; /* width of our icon */
  49.     case sdevDrawStatus:
  50.         PlotIconSuite(statusRect, kAlignAbsoluteCenter, kTransformNone, iconSuite);
  51.         break;
  52.     case sdevMouseClick:
  53.             /* call the screen saver and tell it to sleep */
  54.             if (Gestalt(gestaltScreenSaverControl, (long *)&scp) == noErr &&
  55.                 scp != NULL)
  56.                 (*scp)(eSaverSleep);
  57.             else
  58.                 /* if there is no screen saver, we're redundant, and should close. */
  59.                 return 1<<sdevCloseNow;
  60.         break;
  61.     default:
  62.         break;
  63.     }
  64.     return 0;
  65. }
  66.